"""
宿舍内务 plus
宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：

1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：打扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分
宿舍有六个人，上个月的内务完成情况如下：

老大：打扫厕所3次，扫地5次，擦窗户2次
老二：帮打饭4次，拖地3次，擦桌子1次
老三：帮签到2次，打扫厕所1次，扫地2次
老四：擦窗户3次，拖地2次，打扫厕所2次
老五：帮打饭2次，帮签到1次，擦桌子3次
老六：扫地4次，拖地4次，擦窗户1次
编写一个函数来统计所有人的分数并打印出来。然后找出最懒和最勤快的室友，计算最懒的室友至少需要帮打多少次饭才能追上最勤快的室友。

编程思路提示：
使用 sorted 函数对字典进行排序，然后取出第一个和最后一个元素，即可找出最懒和最勤快的室友。
sorted 函数的 key 参数可以指定排序的依据，lambda 函数可以用来指定排序的依据。例如：
    sorted(dorm_tasks.keys(), key=lambda x: dorm_tasks.get(x))  # 按照分数对室友名字进行排序
"""
def main():
    # 存储每个室友的任务完成情况
    dorm_tasks = {
        "老大": {"3级": 3, "2级": 5, "1级": 2},
        "老二": {"4级": 4, "2级": 3, "1级": 1},
        "老三": {"5级": 2, "3级": 1, "2级": 2},
        "老四": {"1级": 3, "2级": 2, "3级": 2},
        "老五": {"4级": 2, "5级": 1, "1级": 3},
        "老六": {"2级": 4, "1级": 1}
    }
    # 存储每个等级对应的分数
    level_scores = {
        "1级": 1,
        "2级": 2,
        "3级": 3,
        "4级": 4,
        "5级": 5
    }
    # 计算每个室友的总分数
    scores = {}
    for roommate, tasks in dorm_tasks.items():
        total_score = 0
        for level, times in tasks.items():
            total_score += level_scores[level] * times
        scores[roommate] = total_score
    # 打印每个室友的分数
    for roommate, score in scores.items():
        print(f"{roommate} 的分数是：{score}")
    # 找出最懒和最勤快的室友
    sorted_roommates = sorted(scores.items(), key=lambda x: x[1])
    laziest_roommate = sorted_roommates[0]
    most_hardworking_roommate = sorted_roommates[-1]
    print(f"最懒的室友是 {laziest_roommate[0]}，分数是 {laziest_roommate[1]}")
    print(f"最勤快的室友是 {most_hardworking_roommate[0]}，分数是 {most_hardworking_roommate[1]}")
    # 计算最懒的室友至少需要帮打多少次饭才能追上最勤快的室友
    score_diff = most_hardworking_roommate[1] - laziest_roommate[1]
    meals_to_catch_up = (score_diff // 4) + (1 if score_diff % 4 else 0)
    print(f"{laziest_roommate[0]} 至少需要帮打饭 {meals_to_catch_up} 次才能追上 {most_hardworking_roommate[0]}")


if __name__ == "__main__":
    main()